#!/usr/bin/python
# -*- encoding: utf-8 -*-
'''
@File    :   3.py
@Time    :   2020/06/24 14:36:08
@Author  :   Malygos_l 
@Version :   1.0
@Contact :   751756061@qq.com
@WebSite :   www.gitee.com/malygos_l
'''
# Start typing your code from here
'''
3  多进程练习：
计算1～100000之间所有素数的个数， 要求如下:
- 编写函数判断一个数字是否为素数，然后统计素数的个数；
-对比1: 对比使用多进程和不使用多进程两种方法的统计速度。
-对比2：对比开启4个多进程和开启10个多进程两种方法的速度
'''

from multiprocessing import Pool
import time
import threading

count = 0


def prime(num):
    global count
    flag = 0
    i = 2
    while i < num / 2:
        if num % i == 0:
            flag = 1
            break
        i += 1

    if flag == 0:
        count += 1
    return count


def multithreading():
    for i in range(10000):
        prime(i)


def main():
    # 不使用多进程
    start_no = time.time()
    multithreading()
    end_no = time.time()
    print("1-10000素数：%d,不使用多进程时间：%s" % (count, end_no - start_no))

    #4个进程
    p4 = Pool(4)
    start_4 = time.time()
    multithreading()
    p4.close()
    p4.join()
    end_4 = time.time()
    print("1-10000素数：%d,使用4个进程时间：%s" % (count / 2, end_4 - start_4))

    #10个进程
    p10 = Pool(10)
    start_10 = time.time()
    multithreading()
    p10.close()
    p10.join()
    end_10 = time.time()
    print("1-10000素数：%d,使用10个进程时间：%s" % (count / 3, end_10 - start_10))


if __name__ == "__main__":
    main()